package com.colodoo.code.service;

import com.colodoo.code.common.QueryRequest;
import com.colodoo.code.entity.ModuleInf;
import com.colodoo.code.entity.TableInf;
import com.colodoo.code.mapper.TableInfRepository;
import com.colodoo.framework.exception.AppException;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
 * 数据表-服务类
 *
 * @author zhisan
 */
@Service
public class TableInfService {

	@Resource
	private TableInfRepository tableInfRepository;
	@Resource
	private ModuleInfService moduleInfService;

	/**
	 * 保存
	 *
	 * @param tableInf
	 */
	public void saveTableInf(TableInf tableInf) {
		this.tableInfRepository.save(tableInf);
	}

	/**
	 * 删除
	 *
	 * @param tableInf
	 */
	public void deleteTableInf(TableInf tableInf) {
		this.tableInfRepository.delete(tableInf);
	}

	/**
	 * 根据ID删除
	 *
	 * @param tableInfId
	 */
	public void deleteTableInfById(Integer tableInfId) {
		this.tableInfRepository.deleteById(tableInfId);
	}

	/**
	 * 批量删除
	 *
	 * @param tableInfs
	 */
	public void deleteTableInfBatch(List<TableInf> tableInfs) {
		this.tableInfRepository.deleteInBatch(tableInfs);
	}

	/**
	 * 更新
	 *
	 * @param tableInf
	 */
	public void updateTableInf(TableInf tableInf) {
		this.tableInfRepository.save(tableInf);
	}


	/**
	 * 根据ID获取实体
	 *
	 * @param tableInfId
	 * @return
	 */
	public TableInf getTableInfById(Integer tableInfId) {
		return this.tableInfRepository.findById(tableInfId).get();
	}

	/**
	 * 获取列表
	 *
	 * @param tableInf
	 * @param request
	 * @return
	 */
	public Page<TableInf> getTableInfs(TableInf tableInf, QueryRequest request) {
		return this.tableInfRepository.findAll(Example.of(tableInf), PageRequest.of(request.getPage(), request.getRows()));
	}

	public void saveTableInfByModuleId(Integer moduleId, TableInf tableInf) {

		// 1-获取模块
		ModuleInf moduleInf = this.moduleInfService.getModuleInfById(moduleId);
		if (moduleInf == null) {
			throw new AppException("模块获取失败!");
		}

		// 2-模块中新增数据表
		moduleInf.getTables().add(tableInf);

		// 3-保存
		this.tableInfRepository.save(tableInf);
		this.moduleInfService.saveModuleInf(moduleInf);

	}
}
